home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -serious- / programming / e / powerd / source / examples / flare.d < prev    next >
Text File  |  2000-01-27  |  3KB  |  107 lines

  1. MODULE    'intuition/intuition','intuition/screens','graphics/modeid'
  2.  
  3. CONST    W=320,H=240
  4.  
  5. PROC main()
  6.     DEF    flist:PTR TO flare
  7.     flist:=[
  8.         FL_Linear    , 50.0, 0.00,1.0,1.0,1.0,
  9.         FL_Power        , 60.0, 0.00,0.0,0.3,1.0,
  10.         FL_Circle    , 30.0,-0.10,0.1,0.1,0.1,
  11.         FL_Circle    , 10.0, 0.20,0.1,0.1,0.1,
  12.         FL_Circle    , 34.0, 0.25,0.1,0.1,0.1,
  13.         FL_Circle    , 20.0, 0.30,0.1,0.1,0.1,
  14.         FL_Circle    , 14.0, 0.40,0.1,0.1,0.1,
  15.         FL_Power        ,  2.0, 0.47,0.2,0.7,1.0,
  16.         FL_Circle    ,  4.0, 0.55,0.1,0.1,0.1,
  17.         FL_Circle    , 26.0, 0.60,0.1,0.1,0.1,
  18.         FL_Circle    , 12.0, 0.70,0.1,0.1,0.1,
  19.         FL_Circle    , 16.0, 0.85,0.1,0.1,0.1,
  20.         FL_Circle    ,100.0, 1.00,0.1,0.1,0.1,
  21.         FL_Circle    ,200.0, 1.50,0.1,0.1,0.1,
  22.         FL_Last]:flare
  23.     PrintF('Flare by MarK 28.12.1999\n')
  24.     PrintF('Press:\n\tLMB to change light position\n\tany key for exit\n')
  25.     IF Preview(flist)
  26. //        Render(flist)
  27.     ENDIF
  28. ENDPROC
  29.  
  30. //
  31. // currently is used only FL_Last, everything else is for flare rendering, but it is
  32. // not done yet.
  33. //
  34. ENUM    FL_Last,
  35.         FL_Linear,
  36.         FL_Power,
  37.         FL_Circle,
  38.         FL_Ring,
  39.         FL_FadeRing
  40.  
  41. OBJECT flare
  42.     type:LONG,        // type of the flare (see FL... above)
  43.     size:FLOAT,        // size of the flare
  44.     pos:FLOAT,        // position on the flare line (0=light, 1.0=opposite the light)
  45.     r:FLOAT,            // colour of the flare
  46.     g:FLOAT,
  47.     b:FLOAT
  48.  
  49. PROC Preview(flist:PTR TO flare)(LONG)
  50.     DEF    s:PTR TO Screen,w:PTR TO Window,m:PTR TO IntuiMessage,end=FALSE,r=FALSE
  51.     IF s:=OpenScreenTags(NIL,
  52.             SA_Width,W,
  53.             SA_Height,H,
  54.             SA_Depth,1,
  55. //            SA_DisplayID,VGALORESDBL_KEY,
  56.             SA_Colors,[0,0,0,0,1,15,15,15,-1]:WORD,
  57.             TAG_END)
  58.         IF w:=OpenWindowTags(NIL,
  59.                 WA_Width,W,
  60.                 WA_Height,H,
  61.                 WA_CustomScreen,s,
  62.                 WA_IDCMP,IDCMP_MOUSEBUTTONS|IDCMP_VANILLAKEY,
  63.                 WA_Flags,WFLG_RMBTRAP|WFLG_ACTIVATE|WFLG_BORDERLESS,
  64.                 TAG_END)
  65.             SetAPen(w.RPort,1)
  66.             DrawFlare(w.RPort,flist,w.MouseX,w.MouseY)
  67.  
  68.             WHILE WaitPort(w.UserPort)
  69.                 IF m:=GetMsg(w.UserPort)
  70.                     IF m.Class=IDCMP_MOUSEBUTTONS
  71.                         IF m.Code=SELECTDOWN
  72.                             SetRast(w.RPort,0)
  73.                             DrawFlare(w.RPort,flist,w.MouseX,w.MouseY)
  74.                         ELSEIF m.Code=MENUDOWN
  75.                             r:=TRUE
  76.                             end:=TRUE
  77.                         ENDIF
  78.                     ELSE
  79.                         end:=TRUE
  80.                     ENDIF
  81.                     ReplyMsg(m)
  82.                 ENDIF
  83.             EXITIF end=TRUE
  84.             ENDWHILE
  85.  
  86. //            WaitPort(w.UserPort)
  87.             CloseWindow(w)
  88.         ELSE PrintF('Unable to open window!\n')
  89.         CloseScreen(s)
  90.     ELSE PrintF('Unable to open screen!\n')
  91. ENDPROC r
  92.  
  93. PROC DrawFlare(rp,flist:PTR TO flare,mx:FLOAT,my:FLOAT)
  94.     DEFF    cx,cy,dx,dy,x,y
  95.     cx:=W/2
  96.     cy:=H/2
  97.     dx:=cx-mx
  98.     dy:=cy-my
  99.     REPEAT
  100.         x:=-dx*(flist.pos*2.0-1.0)
  101.         y:=-dy*(flist.pos*2.0-1.0)
  102. //        PrintF('x=$\z\h[8]\ny=$\z\h[8]\n',x,y)
  103.         DrawEllipse(rp,x+cx,y+cy,flist.size/2,flist.size/2)
  104.         flist[]++
  105.     UNTIL flist.type=FL_Last
  106. ENDPROC
  107.